<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 构造函数

        // 工厂模式：类，生产对象；
        // 工厂模式的缺点  ：性能不好，占用内存；
        // function Person(name){
        //     let obj = {};
        //     obj.name = name;
        //     obj.fn = function(){
        //         console.log("fn");
        //     }
        //     return obj;
        // }

        // let zhangsan = Person("张三");
        // // zhangsan.fn();
        // let lisi  = Person("李四");
        // // lisi.fn();
        // console.log(zhangsan.fn===lisi.fn);




        // let obj1 = function(){
        //     console.log("fn");
        // }
        // let obj2 = function(){
        //     console.log("fn");
        // }
        // console.log(obj1===obj2); //如果是true 那么证明obj1和obj2是一个内存空间；否则不是
        
        // let obj1 = function(){
        //     console.log("fn");
        // }

        // let obj2 = obj1;
        // console.log(obj1===obj2);




        // 构造函数：提供一个公共的空间来存放 复杂数据类型（函数）；
        // 构造函数 constructor
        // 构造函数的调用：new 来调用；
        // 公共空间就是原型；
        function Person(name){
            // let obj = {}  --->obj  === this;
            // let obj  ={};
            this.name = name;
            // return this;
        }
        Person.prototype.fn = function(){
            console.log("fn");
        }

        // new 调用函数 ：1.创建一个空对象。2.把创建的空对象和函数内的this绑定 3.隐式返还这个对象
        let zhangsan = new Person("张三");
        zhangsan.fn();
        let lisi = new Person("李四");
        lisi.fn();
        console.log(zhangsan.fn===lisi.fn);








    </script>
</body>
</html>